/**
* Here's some constants and prototypes that won't clutter problems.c file
*/

/**
* This enum tells the program what problem to solve
*/
enum
{
    TRANSPONATE_MATRIX = 1, /**< This means program will transonate the matrix*/
    Nth_SIMPLE_NUMBER = 2, /**< This means program will find n-th simple number*/
    SUM_OF_ALL_DIVIDERS = 3, /**< This means program will find sum of all dividers of some number*/
    SYMBOL_FILTER = 4, /**< This means that program will filter all symbols from stdin*/
    WORDS_REVERSING = 5, /**< This means that program will reverse words from stdin*/
    SORTING_OF_STUDENTS = 6, /**< This means that program will sort list of students by marks and then by
                                                    names*/
    FREED_FROM_SQUARES = 7, /**< This means that program will get some numbers and print only freed from
                                                        squares from them*/
    THE_MOST_FARTHEST_POINTS = 8, /**< This means that program will find two the most farthest points from
                                                                stdin*/
    FULL_SQUARES = 9, /**< This means that program will get some numbers from stdin and then print
                                            only full squares from them*/
    TABLE_OF_POWERS = 10 /**< This means program will give you table of powers*/
    };

/**
* This is the way to use boolean values more comfortably
*/
enum
{
    FALSE = 0, /**< This means false(untrue) statement*/
    TRUE = 1 /**< This means true(unfalse) statement*/
};

#define MAX_STRING 10000
#define MAX_STUDENT_NAME 30

#define WRONG_INT  -2048
#define WRONG_CHAR -1

#define BEGIN 'A'
#define END 'Z'

#define DEBUG_STRING(param) printf("DBG|||"#param "=%s|||DBG\n", param);
#define DEBUG_INT(param) printf("DBG|||"#param "=%i|||DBG\n", param);
#define DEBUG_CHAR(param) printf("DBG|||"#param "=%i|||DBG\n", param);

struct Student
{
    int mark;
    char* name;
};

struct Point
{
    double x;
    double y;
};

struct Matrix
{
    long** data;
    int mat_size;
};


int transponate_matrix();
int nth_simple_number();
int sum_of_all_dividers();
int symbol_filter();
int words_reversing();
int sorting_of_students();
int freed_from_squares();
int the_most_farthest_points();
int full_squares();
int table_of_powers();
int is_square(long number);
int is_freed_from_squares(long number);
struct Matrix make_matrix();
struct Matrix transponate(struct Matrix arg);
int print_matrix(struct Matrix arg);
int fill_with_simple_numbers (int* array_of_simple_numbers, int arr_size);
int get_reversed_word(char* str, int position, char* reversed_word);
int compare_student_by_mark (struct Student* stud1, struct Student*  stud2);
int compare_student_by_name (struct Student*  stud1, struct Student*  stud2);
